#include "bsp_key.h"

/*
	10ms周期调用bsp_KeyScan()
	
	读取按键的状态  KEY_ENUM bsp_GetKeyState()
	 KEY_NONE  	0 表示无按键事件 
	 KEY_DOWN	 	1 按下
	 KEY_UP		 	2 弹起
*/


KEY_T key;


uint8_t IsKeyDown(void) {if ((GPIO_PORT_KEY->INDR & GPIO_PIN_K1) == KEY_DOWN_LEVEL) return 1;else return 0;}   // 检测是否为低电平



/*
*********************************************************************************************************
*	函 数 名: KEY_Init
*	功能说明: 配置按键对应的GPIO，初始化需要使用到的变量
*	形    参:  无
*	返 回 值: 无
*********************************************************************************************************
*/
void KEY_Init(void)
{
	GPIO_InitTypeDef  GPIO_InitStructure;
  RCC_APB2PeriphClockCmd(RCC_ALL_KEY, ENABLE);	    
	GPIO_InitStructure.GPIO_Pin = GPIO_PIN_K1;              
  GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IPU;           
  GPIO_InitStructure.GPIO_Speed=GPIO_Speed_50MHz;
  GPIO_Init(GPIO_PORT_KEY, &GPIO_InitStructure); 
	
	
	// 初始化需要使用到的变量
	key.IsKeyDownFunc = IsKeyDown;
	key.State = KEY_NONE;		// 初始化状态
	key.LongCount = 0;

}




/*
*********************************************************************************************************
*	函 数 名: bsp_KeyScan
*	功能说明: 扫描所有按键。非阻塞，10ms周期性的调用
*	形    参:  无
*	返 回 值: 无			
*********************************************************************************************************
*/
void KEY_Scan(void)
{
	if(key.IsKeyDownFunc())   
	{
		key.LongCount++;
		if(key.LongCount>KEY_FILTER_TIME)  	 key.State = KEY_DOWN;
	}
	else{
		key.State = KEY_UP;
		key.LongCount = 0;			
	}
}

